<?php

namespace IYUU\sdk\CoolQ\Event;

use IYUU\sdk\CoolQ\Context;
use IYUU\sdk\CoolQ\Event;

/**
 * 上报类型：post_type -> request
 * Class Request
 * @package IYUU\sdk\CoolQ\Event
 */
class Request extends Event
{
    /**
     * 请求类型
     * - 可能的值：加好友请求{friend}、加群请求／邀请{group}
     * -          接收到离线文件{offline_file}
     * @var string
     */
    protected $request_type = '';

    /**
     * 消息子类型
     * @var string
     */
    protected $sub_type = '';

    /**
     * 父类的抽象方法，子类必须实现
     * @param Context $context
     * @return mixed
     */
    public function index(Context $context): array
    {
        // 调试日志
        if ($this->getConfig('debug')) {
            file_put_contents(runtime_path() . '/Request.log', __METHOD__ . p($context->get(), false), FILE_APPEND);
        }
        /**
         * 默认请求处理器
         */
        return $this->callableAction($this->request_type);
    }

    /**
     * 回调：加好友请求{friend}
     * @return array
     */
    public function callable_friend(): array
    {
        return [];
    }

    /**
     * 回调：加群请求／邀请{group}
     * @return array
     */
    public function callable_group(): array
    {
        return [];
    }

    /**
     * 快捷处理加好友请求
     * @param bool $approve 是否同意请求（默认 不处理）
     * @param string $remark 添加后的好友备注，仅在同意时有效（默认 无备注）
     * @return array
     */
    public function handleFriendRequest(bool $approve = false, string $remark = ''): array
    {
        return [
            'approve' => $approve,
            'remark' => $remark
        ];
    }

    /**
     * 快捷处理加群请求／邀请
     * @param bool $approve 是否同意请求／邀请（默认 不处理）
     * @param string $remark 拒绝理由 ( 仅在拒绝时有效 )（默认 无备注）
     * @return array
     */
    public function handleGroupRequest(bool $approve = false, string $remark = ''): array
    {
        $rs = [
            'approve' => $approve,
            'reason' => $remark
        ];

        if ($approve) {
            unset($rs['reason']);
        }
        return $rs;
    }
}
